const express = require('express');
const mysql = require('mysql2/promise');
const cors = require('cors');
// const bcrypt = require('bcrypt');

const app = express();
const PORT = 3000; // 使用3001端口，避免与前端3000端口冲突

// 中间件
app.use(cors()); // 允许跨域请求
app.use(express.json()); // 解析JSON请求体

// MySQL 数据库配置
const dbConfig = {
    host: 'localhost',
    user: 'root',
    password: '12345',
    database: 'notebook'
};

// 创建数据库连接池
const pool = mysql.createPool({
    ...dbConfig,
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0
});

// 测试数据库连接
async function testConnection() {
    try {
        const connection = await pool.getConnection();
        console.log('数据库连接成功');
        connection.release();
    } catch (error) {
        console.error('数据库连接失败:', error);
    }
}

// 登录接口
app.post('/user/login', async (req, res) => {
    try {
        const { username, password } = req.body;
        console.log(username, password);

        // 验证输入
        if (!username || !password) {
            return res.status(400).json({
                success: false,
                message: '用户名和密码不能为空'
            });
        }

        // 查询用户
        const [rows] = await pool.execute(
            'SELECT * FROM user WHERE username = ?',
            [username]
        );
        console.log(rows);

        if (rows.length === 0) {
            return res.status(401).json({
                success: false,
                message: '用户名或密码错误'
            });
        }

        const user = rows[0];

        // 验证密码
        // 如果密码是明文存储（不推荐），直接比较
        const isPasswordValid = password === user.password;

        // 如果密码是加密存储（推荐），使用bcrypt比较
        // const isPasswordValid = await bcrypt.compare(password, user.password);

        if (!isPasswordValid) {
            return res.status(401).json({
                success: false,
                message: '用户名或密码错误'
            });
        }

        // 登录成功，返回用户信息（不包含密码）
        const { password: _, ...userInfo } = user;

        res.json({
            success: true,
            message: '登录成功',
            data: {
                user: userInfo
            }
        });

    } catch (error) {
        console.error('登录错误:', error);
        res.status(500).json({
            success: false,
            message: '服务器内部错误'
        });
    }
});

// 注册接口（可选）
app.post('/user/register', async (req, res) => {
    try {
        const { username, password } = req.body;

        if (!username || !password) {
            return res.status(400).json({
                success: false,
                message: '用户名和密码不能为空'
            });
        }

        // 检查用户是否已存在
        const [existingUsers] = await pool.execute(
            'SELECT id FROM users WHERE username = ?',
            [username]
        );

        if (existingUsers.length > 0) {
            return res.status(409).json({
                success: false,
                message: '用户名已存在'
            });
        }

        // 插入新用户
        const [result] = await pool.execute(
            'INSERT INTO users (username, password, created_at) VALUES (?, ?, NOW())',
            [username, password] // 如果使用加密密码，这里用 hashedPassword
        );

        res.status(201).json({
            success: true,
            message: '注册成功',
            data: {
                userId: result.insertId
            }
        });

    } catch (error) {
        console.error('注册错误:', error);
        res.status(500).json({
            success: false,
            message: '服务器内部错误'
        });
    }
});

// 健康检查接口
app.get('/health', (req, res) => {
    res.json({
        success: true,
        message: '服务器运行正常',
        timestamp: new Date().toISOString()
    });
});

// 启动服务器
app.listen(PORT, async () => {
    console.log(`服务器运行在 http://localhost:${PORT}`);
    await testConnection();
});

// 优雅关闭
process.on('SIGINT', async () => {
    console.log('\n正在关闭服务器...');
    await pool.end();
    process.exit(0);
});

module.exports = app;